package com.zrrd.jt_admin.shop.type.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zrrd.jt_admin.common.bo.SkusBo;
import com.zrrd.jt_admin.common.entity.GoodsType;
import com.zrrd.jt_admin.common.entity.GoodsTypeValue;
import com.zrrd.jt_admin.common.entity.Skus;
import com.zrrd.jt_admin.common.entity.SkusGoodsType;
import com.zrrd.jt_admin.common.page.GoodsTypePageVo;
import com.zrrd.jt_admin.common.vo.GoodsTypeVo;
import com.zrrd.jt_admin.shop.skus.service.SkusGoodsTypeService;
import com.zrrd.jt_admin.shop.skus.service.SkusService;
import com.zrrd.jt_admin.shop.type.mapper.GoodsTypeMapper;
import com.zrrd.jt_admin.shop.type.service.GoodsTypeService;
import com.zrrd.jt_admin.shop.type.service.GoodsTypeValueService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author wanjl
 * @since 2024-06-29
 */
@Service
public class GoodsTypeServiceImpl extends ServiceImpl<GoodsTypeMapper, GoodsType> implements GoodsTypeService {

    @Resource
    private GoodsTypeValueService goodsTypeValueService;
    @Resource
    private SkusService skusService;

    @Resource
    private SkusGoodsTypeService skusGoodsTypeService;
    /**
     * 分页查询商品类型
     *
     * @param page
     * @param limit
     * @return
     */
    @Override
    public GoodsTypePageVo findByPage(Integer page, Integer limit) {
        PageHelper.startPage(page, limit);
        List<GoodsTypeVo> list = list().stream().map(goodsType -> {
            GoodsTypeVo goodsTypeVo = new GoodsTypeVo();
            BeanUtils.copyProperties(goodsType, goodsTypeVo);
            Integer goodsTypeId = goodsTypeVo.getId();
            List<GoodsTypeValue> goodsTypeValues = goodsTypeValueService.lambdaQuery().eq(GoodsTypeValue::getGoodsTypeId, goodsTypeId).list();
            goodsTypeVo.setGoodsTypeValues(goodsTypeValues);

            List<Integer> skusIds = skusGoodsTypeService.lambdaQuery().eq(SkusGoodsType::getGoodsTypeId, goodsTypeId).list().stream().map(skusGoodsType -> skusGoodsType.getSkusId()).collect(Collectors.toList());
            List<Skus> skuses;
            if (skusIds.size() > 0) {
                skuses = skusService.listByIds(skusIds);
            }else {
                skuses = skusService.list();
            }


            List<SkusBo> skusBoList =skuses.stream().map(skus -> {
                SkusBo skusBo = new SkusBo();
                BeanUtils.copyProperties(skus, skusBo);
                return skusBo;
            }).collect(Collectors.toList());

            goodsTypeVo.setSkus(skusBoList);
            return goodsTypeVo;
        }).collect(Collectors.toList());
        PageInfo<GoodsTypeVo> pageInfo = new PageInfo<>(list);
        GoodsTypePageVo pageVo = new GoodsTypePageVo();
        pageVo.setList(pageInfo.getList());
        pageVo.setTotalCount(pageInfo.getTotal());
        return pageVo;
    }
}
